/*
 * @authors :Bin Mei
 * @date    :2017-07-28
 * @description：票交汇APP-h5
 */

import {mBridge,mValidate,minHistory,mCookies} from 'min-bridge';


console.log('jsbridge start');
mBridge.goLogin = (url)=>{
  __DEBUG__ && console.info(`bridge.goLogin(${url||location.href})`)
  minHistory.replace({pathname:"/app/login",query:{backTo:(url||location.href)}});
};
window.PJHCLIENTAPP ={
  /*
  *ios 交互专用方法 对象，
  */
  appSetCookie:(config)=>{
    /* 
    * 提供设置cookie 相关信息;
    * @ param {Object} config 键值对的形式存储;
    */
    __DEBUG__ && console.log(config);
    if(!config){
      return ;
    };
    for(var key in config){
      localStorage.setItem(`${key}`,config[key]);
      mCookies.set&&mCookies.set(`${key}`,config[key]);
      __DEBUG__ && console.log('appSetCookie 设置cookie方法后的结果=',document.cookie);
    };
    
  }
};


// 当前环境为票交汇app
if(mValidate.isFromPHJ()){
  /*
   初始化 app方法
  */
  let fnStack = [],
    tiemr,
    // PJhAPP = (mValidate.isIos()?window.webkit&&window.webkit.messageHandlers: window.PJHAppJSInterface),
    PJHAppJSBridge =(name,config)=>{
      /*
      * 调用app方法，因交互方式有差异，统一处理
      * @param {String} name 方法名  
      * @param { Object String} config 配置
      */
      var PJhAPP = (mValidate.isIos()?window.webkit&&window.webkit.messageHandlers: window.PJHAppJSInterface);
      if(!name){
        return;
      };
      if(mValidate.isIos() || PJhAPP[name].hasOwnProperty('postMessage')){
        PJhAPP[name].postMessage(JSON.stringify(config));
        __DEBUG__ && console.log("ios");
      }else{
        __DEBUG__ && console.log("android");
        if(name =="onJSGetAppInfo"){
          __DEBUG__ && console.log("android 获取app信息",'result',PJhAPP[name](JSON.stringify(config)));
          return PJhAPP[name](JSON.stringify(config));
        };
        PJhAPP[name](JSON.stringify(config));
      }
    },
    getApi = () => (mValidate.isIos()?window.webkit&&window.webkit.messageHandlers: window.PJHAppJSInterface);

  mBridge.PJHAppJSBridge = PJHAppJSBridge;
   /***
   mBridge.ready = function(fn){     
    if('function' != typeof fn) { 
        return;
    };
    var result = getApi();
    if(result){
        fn(result);
        return;
    } 
    fnStack.push(fn);
    mBridge.wait();
  }

  mBridge.wait = function(){
    if( timer ) return;
    timer = setInterval(function(){
        var result = getApi(), fn;
        if( result ){
            clearInterval( timer );
            timer = 0;
            while(fn = fnStack.shift()){
                fn(result)
            }
        }
    },200)
  };
 !!!! ready wait 两方法暂时弃用 ***/

  mBridge.getAppInfo = function(type){

    /* 1、 获取App的信息，如版本号、sessionId等
      @param {String} type 获取的信息类型 
      type-列表
      ’VERSION’ —获取App当前版本号信息
      ’SESSIONID’ —获取App的登录状态，返回用户的sessionId ，默认返回’';*/

    var result = PJHAppJSBridge('onJSGetAppInfo',{type:type});//PJhAPP.onJSGetAppInfo(JSON.stringify({type:type}));
    __DEBUG__ && console.log("onJSGetAppInfo",result); 
    return result;  
  };

  mBridge.doAction = function(action, extra, callBack){
    /* 
    * 2、设置标题 
    * @param {Object String} config 配置  
    * @param {String} title 当前页面的标题  
    * @param {String} type  HOME—表示一级页面如：市场，账户，邀请等,默认 DEFAULT
    */
    
    switch (action) {
      case 'setTitle':
        var config = {
          type:(extra.type||'DEFAULT'),
          title:extra.title
        };
        PJHAppJSBridge('onJSSetTitle',config);
        document.body.className =extra.class||"";
        break;
      default:
    }
  };

  // mBridge.appSetCookie = function (config) {
  //   /* 
  //   * 提供设置cookie 相关信息;
  //   * @ param {Object} config 键值对的形式存储;
  //   */
  //   __DEBUG__ && console.log(config);
  //   if (typeof config === "string") {
  //     config = JSON.parse(config);
  //   }
  //   if (!config) {
  //     return;
  //   };
  //   for (var key in config) {
  //     format.setCookie(`${key}`, config[key]);
  //   };
    
  // };
  mBridge.goLogin = function(url,isExpire){
    /*
    * H5跳原生页面 
    * @param {Object String} config 配置  
    * @param {String} type 原生app的地址标识  
    */
    __DEBUG__ && console.log("H5跳原生页面-login",url); 
    PJHAppJSBridge('onJSToAppView',{type:"LOGIN",action:{backTo:(url||''),isExpire:(isExpire||"1")}});
    
  };

  mBridge.goAppView = function(config){
    /*
    * H5跳原生页面 
    * @param {Object String} config 配置  
    * @param {String} type 原生app的地址标识  
    */
    /*var config = {
      type:'OPEN',
      action:{}
    };*/
    __DEBUG__ && console.log("H5跳原生页面",config);
    PJHAppJSBridge('onJSToAppView',config);
  }

  mBridge.setPullDown = function(config){
    /*
    * 下拉刷新 
    * @param {Object String} config 配置  
    * @param {String} type 状态 'OPEN' 开启，'CLOSE' 关闭 
    * @param {function} action 动作 要调用的方法, type = CLOSE 时，忽略action字段
    */
    /*var config = {
      type:'OPEN',
      action:'callBack'
    };*/
    __DEBUG__ && console.log("下拉刷新-onJSSetPullDown",config);
    PJHAppJSBridge('onJSSetPullDown',config); 
  };

  mBridge.setAppRightMenu = function(config){
    /*
    * 初始化设置右上角菜单 
    * @param {Object String} config 配置  
    * @param {String} type 状态 'OPEN' 开启，'CLOSE' 关闭 
    * @param {String} position 菜单位置 默认RIGHT ,'CENTER' 中间，'RIGHT' 右边 
    * @param {Array} action 动作 要调用的方法, type = CLOSE 时，忽略action字段
    * @param {Array} action[type] 类型，link=链接，click 点击
    * @param {Array} action[name] 菜单名
    * @param {Array} action[href] 跳转的地址，!! type = link  类型，该字段生效
    * @param {Array} action[events] 事件方法，!! type = click 类型，该字段生效
    */

    /*var config = {
      type:'OPEN',
      position:"RIGHT",
      action:[{
        type:"LINK",
        name:"个人中心",
        href:"http://pjh.com/user/center"
        },{
        type:"CLICK",
        name:"个人中心",
        href:"",
        events:"挂载在window上的一个方法"
      }]
    };*/
    __DEBUG__ && console.log("初始化设置右上角菜单 - onJSUpperRightMenu",config);
    PJHAppJSBridge('onJSUpperRightMenu',config); 
  };
  mBridge.setWebViewExterior = function(config){
    /*
    * 设置 webview 外观 
    * 说明：颜色值必须rgba(255,255,255,.1)的形式传入
    * @param {Object String} config 配置  
    * @param {String} type 状态 'OPEN' 开启，'CLOSE' 恢复默认 
    * @param {Object} action 动作 type = CLOSE 时，忽略action字段
    * @param {string} action[fullScreen] 是否全屏，默认否，'OPEN' 开启，'CLOSE' 关闭
    * @param {string} action[navigator] 是否显示导航条，默认开启，'OPEN' 开启，'CLOSE' 关闭
    * @param {string} action[backgroundColor] webView 的背景色；默认 #eff5fe
    * @param {string} action[navBarTitleColor] webView 的背景色；默认 #eff5fe
    * @param {string} action[navBarBackgroundColor] webView 导航条标题的颜色；默认不传
    * @param {string} action[navBarTransitionBackgroundColor] webView 页面滚动导航条过渡颜色（目标颜色值）；默认 '';
    */
    /*var config = {
      type:'OPEN',
      action:{
        fullScreen:"CLOSE",
        navigator:"OPEN",
        viewBackgroundColor:"rgba(255,255,255,.1)",
        navBarBackgroundColor:"rgba(255,255,255,.1)",
        navBarTitleColor:"rgba(255,255,255,.1)",
        navBarTransitionBackgroundColor:"rgba(255,255,255,0)”
      }
    };*/
    __DEBUG__ && console.log("设置 webview 外观 - onJSSetWebViewExterior",config);
    PJHAppJSBridge('onJSSetWebViewExterior',config); 
  };

  mBridge.setMenuShare = function(config){
  
    /* -------分割--
    * 8、分享 - onJSMenuShare
    * 说明：
    * @param {Object String} config 配置  
    * @param {String} type 状态 'OPEN' 开启，'CLOSE' 恢复默认 
    * @param {Object} action 动作 type = CLOSE 时，忽略action字段
    * @param {string} action[apiList] 要分享的列表 ["TIMELINE","WEIXIN","QQ","QZONE","SINA_WEIBO","NOTE"]
    * @param {string} action[title] 分享标题
    * @param {string} action[desc] 分享描述
    * @param {string} action[link] 分享链接
    * @param {string} action[imgUrl] 分享图标
    * @param {string} action[type] 分享类型,music、img、video、text或link，不填默认为link
    * @param {string} action[dataUrl] 如果type是music、img、video、text，则要提供数据链接，默认为空
    * @param {function} action[success] 成功回调
    * @param {function} action[cancel] 失败回调
    * @param {function} res {code:"0000",data:{shareType:"TIMELINE"}} 
    */
    /*var config = {
      type:'OPEN',
      action:{
        apiList:["TIMELINE","WEIXIN","QQ","QZONE","SINA_WEIBO","NOTE"],//要分享的列表
        title: '', // 分享标题
        desc: '', // 分享描述
        link: '', // 分享链接
        imgUrl: '', // 分享图标
        type: '', // 分享类型,music、img、video、text或link，不填默认为link
        dataUrl: '', // 如果type是music或video，则要提供数据链接，默认为空
        success: function (res) {
            // 用户确认分享后执行的回调函数
        },
        cancel: function (res) {
            // 用户取消分享后执行的回调函数
        }

      }
    };*/
    __DEBUG__ && console.log("调用分享功能 - onJSMenuShare",config);
    PJHAppJSBridge('onJSMenuShare',config);
  };
}

